package br.ucb.cesbdao.persistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;

import br.ucb.cesbdao.beans.Frequencia;
import br.ucb.cesbdao.persistencia.AbstractConnectionDAO;
import br.ucb.cesbdao.persistencia.factory.FactoryConnection;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.utilBeans.FrequenciaUtil;



public class FrequenciaDAO extends AbstractConnectionDAO{
	
	public FrequenciaDAO(Connection con) {
		super(con);
	}

	public  void setFrequencia(Frequencia frequencia) throws ClassNotFoundException, SQLException{
		PreparedStatement stm = getConexao().prepareStatement(INSERE_FREQUENCIA);
		java.sql.Date dataAtual = new java.sql.Date(DateUtil.getDataAtual().getTime());
		stm.setInt(1, frequencia.getId());
		stm.setDate(2, dataAtual);
		stm.setString(3, frequencia.getDia());
		stm.setTime(4, Time.valueOf(frequencia.getHora()));
		stm.execute();
		FactoryConnection.getInstance().closeConexao(stm);
	}

	public  Frequencia getFrequenciabyChaveToday(Integer id) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(BUSCA_POR_CHAVE_HOJE);
		java.sql.Date dataAtual = new java.sql.Date(DateUtil.getDataAtual().getTime());
		stm.setInt(1, id);
		stm.setDate(2, dataAtual);
		ResultSet rs = stm.executeQuery();
		Frequencia frequencia = null;
		if(rs.first()){
			frequencia = FrequenciaUtil.newFrequencia(rs);
		}
		return frequencia;
	}

	public  ArrayList<Frequencia> getFrequenciabyIdPessoa(Integer id) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(BUSCA_POR_CHAVE);
		stm.setInt(1, id);
		ResultSet rs = stm.executeQuery();
		Frequencia frequencia = null;
		ArrayList<Frequencia> frequencias = new ArrayList<Frequencia>();
		if(rs.first()){
			frequencia = FrequenciaUtil.newFrequencia(rs);
			frequencias.add(frequencia);

		}
		return frequencias;
	}
	public  ArrayList<Frequencia> getFrequenciabyIdPessoaPeriodo(Integer id,Date dataInicio, Date dataFim) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(BUSCA_PESSOA_PERIODO);
		stm.setInt(1, id);
		stm.setDate(2, new java.sql.Date(dataInicio.getTime()));
		stm.setDate(3, new java.sql.Date(dataFim.getTime()));
		ResultSet rs = stm.executeQuery();
		Frequencia frequencia = null;
		ArrayList<Frequencia> frequencias = new ArrayList<Frequencia>();
		if(rs.first()){
			frequencia = FrequenciaUtil.newFrequenciaP(rs);
			frequencias.add(frequencia);

		}
		return frequencias;
	}
	public  ArrayList<Frequencia> getFrequenciabyGrupo(Integer idGrupo, Date dataInicio, Date dataFim) throws SQLException, ClassNotFoundException {
		PreparedStatement stm = getConexao().prepareStatement(BUSCA_POR_GRUPO);
		stm.setInt(1, idGrupo);
		stm.setInt(2, idGrupo);
		stm.setDate(3, new java.sql.Date(dataInicio.getTime()));
		stm.setDate(4, new java.sql.Date(dataFim.getTime()));
		ResultSet rs = stm.executeQuery();
		Frequencia frequencia = null;
		ArrayList<Frequencia> frequencias = new ArrayList<Frequencia>();
		if(rs.next()){
			frequencia = FrequenciaUtil.newFrequenciaRl(rs);
			frequencias.add(frequencia);

		}
		return frequencias;
	}
	
	private static final String INSERE_FREQUENCIA =				"INSERT INTO daoFrequencia VALUES(?,?,?,?);";
	private static final String BUSCA_POR_CHAVE_HOJE = 			"SELECT *FROM daofrequencia WHERE chavePessoa = ? and data = ?";
	private static final String BUSCA_POR_CHAVE = 				"SELECT *FROM daofrequencia WHERE chavePessoa = ?";
	private static final String BUSCA_PESSOA_PERIODO =	 		"select * "+
																"from daopessoa p, daofrequencia f "+
																"where p.chavePessoa = f.chavePessoa and "+
																"p.chavePessoa = ? and "+
																"f.data >= ? and "+
																"f.data <= ?;";

	private static final String BUSCA_POR_GRUPO = 				"select p.nomePessoa,f.data "+ 
																"from daopessoa p, daogrupo g,daofrequencia f "+
																"where p.chavePessoa in ( "+
																"select tg.chavePessoa "+ 
																"from daotrabalhador_grupo tg "+
																"where tg.idgrupo = ? "+
																") "+ 
																"and f.chavepessoa = p.chavepessoa "+
																"and g.idGrupo = ? "+
																"and f.diasemana = g.diasemana "+
																"and f.data >= ? "+
																"and f.data <= ?;";
}
